package pe.gob.onpe.ejb;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import pe.gob.onpe.ejb.id.ParticipacionListaCandidatosId;


/**
 * ParticipacionListaCandidatos entity.
 * 
 * @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "PARTICIPACION_LISTA_CANDIDATOS", schema = "SVENP", uniqueConstraints = {})
public class ParticipacionListaCandidatos implements java.io.Serializable {

	private ParticipacionListaCandidatosId id;
	private ListaCandidatosPostulante listaCandidatosPostulante;
	private Procesoelectoraltipoeleccion procesoelectoraltipoeleccion;
	private TipoEleccion tipoEleccion;
	private Set<Voto> votos = new HashSet<Voto>(0);

	private static final long serialVersionUID = -7167667085300774566L;

	
	/** default constructor */
	public ParticipacionListaCandidatos() {
	}

	/** minimal constructor */
	public ParticipacionListaCandidatos(ParticipacionListaCandidatosId id,
			ListaCandidatosPostulante listaCandidatosPostulante,
			Procesoelectoraltipoeleccion procesoelectoraltipoeleccion,
			TipoEleccion tipoEleccion) {
		this.id = id;
		this.listaCandidatosPostulante = listaCandidatosPostulante;
		this.procesoelectoraltipoeleccion = procesoelectoraltipoeleccion;
		this.tipoEleccion = tipoEleccion;
	}

	/** full constructor */
	public ParticipacionListaCandidatos(ParticipacionListaCandidatosId id,
			ListaCandidatosPostulante listaCandidatosPostulante,
			Procesoelectoraltipoeleccion procesoelectoraltipoeleccion,
			TipoEleccion tipoEleccion, Set<Voto> votos) {
		this.id = id;
		this.listaCandidatosPostulante = listaCandidatosPostulante;
		this.procesoelectoraltipoeleccion = procesoelectoraltipoeleccion;
		this.tipoEleccion = tipoEleccion;
		this.votos = votos;
	}

	// Property accessors
	@EmbeddedId
	@AttributeOverrides( {
			@AttributeOverride(name = "procesoElectoralId", column = @Column(name = "PROCESO_ELECTORAL_ID", unique = false, nullable = false, insertable = true, updatable = true, precision = 10, scale = 0)),
			@AttributeOverride(name = "listacandidatospostulanteId", column = @Column(name = "LISTACANDIDATOSPOSTULANTE_ID", unique = false, nullable = false, insertable = true, updatable = true, precision = 10, scale = 0)),
			@AttributeOverride(name = "tipoEleccionId", column = @Column(name = "TIPO_ELECCION_ID", unique = false, nullable = false, insertable = true, updatable = true, precision = 10, scale = 0)) })
	public ParticipacionListaCandidatosId getId() {
		return this.id;
	}

	public void setId(ParticipacionListaCandidatosId id) {
		this.id = id;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumns( {
			@JoinColumn(name = "PROCESO_ELECTORAL_ID", referencedColumnName = "PROCESO_ELECTORAL_ID", unique = false, nullable = false, insertable = false, updatable = false),
			@JoinColumn(name = "LISTACANDIDATOSPOSTULANTE_ID", referencedColumnName = "LISTACANDIDATOSPOSTULANTE_ID", unique = false, nullable = false, insertable = false, updatable = false) })
	public ListaCandidatosPostulante getListaCandidatosPostulante() {
		return this.listaCandidatosPostulante;
	}

	public void setListaCandidatosPostulante(
			ListaCandidatosPostulante listaCandidatosPostulante) {
		this.listaCandidatosPostulante = listaCandidatosPostulante;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumns( {
			@JoinColumn(name = "TIPO_ELECCION_ID", referencedColumnName = "TIPO_ELECCION_ID", unique = false, nullable = false, insertable = false, updatable = false),
			@JoinColumn(name = "PROCESO_ELECTORAL_ID", referencedColumnName = "PROCESO_ELECTORAL_ID", unique = false, nullable = false, insertable = false, updatable = false) })
	public Procesoelectoraltipoeleccion getProcesoelectoraltipoeleccion() {
		return this.procesoelectoraltipoeleccion;
	}

	public void setProcesoelectoraltipoeleccion(
			Procesoelectoraltipoeleccion procesoelectoraltipoeleccion) {
		this.procesoelectoraltipoeleccion = procesoelectoraltipoeleccion;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumn(name = "TIPO_ELECCION_ID", unique = false, nullable = false, insertable = false, updatable = false)
	public TipoEleccion getTipoEleccion() {
		return this.tipoEleccion;
	}

	public void setTipoEleccion(TipoEleccion tipoEleccion) {
		this.tipoEleccion = tipoEleccion;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "participacionListaCandidatos")
	public Set<Voto> getVotos() {
		return this.votos;
	}

	public void setVotos(Set<Voto> votos) {
		this.votos = votos;
	}

}